package com.billdowney.service.interfaces.base;

import java.util.List;

import org.springframework.data.jpa.domain.Specification;

import com.billdowney.entity.user.UserLoginInfo;
import com.billdowney.util.return_type.DataPaging;

/**
 * 基础服务接口
 * 
 * @author 超级小富翁 - BillDowney
 * @param <T> 对应entity
 * @date 2019年4月26日 下午3:07:00
 */
public interface BaseService<T> {

	/**
	 * 获取security中的用户信息
	 * 
	 * @return
	 * @author: 超级小富翁 - BillDowney
	 * @date: 2019年2月10日 下午5:42:49
	 */
	public UserLoginInfo getUserLoginInfo();

	/**
	 * 获取Specification查询类
	 * 
	 * @param specParam {@link SpecParam}
	 * @return {@link Specification}
	 * @author: 超级小富翁 - BillDowney
	 * @date: 2019年4月25日 下午6:07:07
	 */
	public Specification<T> getSpec(SpecParam specParam);

	/**
	 * 带条件的分页查询
	 * 
	 * @param spec     {@link Specification}
	 * @param pageNum  查询页数
	 * @param pageSize 查询大小
	 * @return {@link DataPaging}
	 * @author: 超级小富翁 - BillDowney
	 * @date: 2019年4月26日 上午9:17:44
	 */
	public DataPaging findAll(Specification<T> spec, Integer pageNum, Integer pageSize);

	/**
	 * 带条件的分页查询
	 * 
	 * @param specParam {@link SpecParam}
	 * @param pageNum   查询页数
	 * @param pageSize  查询大小
	 * @return {@link DataPaging}
	 * @author: 超级小富翁 - BillDowney
	 * @date: 2019年4月26日 上午11:22:16
	 */
	public DataPaging findAll(SpecParam specParam, Integer pageNum, Integer pageSize);

	/**
	 * 分页查询
	 * 
	 * @param pageNum  查询页数
	 * @param pageSize 查询大小
	 * @return {@link DataPaging}
	 * @author: 超级小富翁 - BillDowney
	 * @date: 2019年4月26日 上午9:19:30
	 */
	public DataPaging findAll(Integer pageNum, Integer pageSize);

	/**
	 * 条件查询
	 * 
	 * @param specParam {@link SpecParam}
	 * @return {@link DataPaging}
	 * @author: 超级小富翁 - BillDowney
	 * @date: 2019年4月26日 下午4:38:47
	 */
	public List<T> findAll(SpecParam specParam);

}
